package com.IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;

/**
 * 目标：使用文件字节输入流：每次读取一个字节数组
 * 默认读取一次就结束（打一桶水），要使用循环，（桶）数组是可以循环使用的
 *
 * 注意，他是将下一次读到的内容去覆盖前面拿到的内容，所以当最后没有三个元素的时候，就会用前面数组的元素代替
 *    [a b c]  要是最后只剩下de   就会打出[d e c]
 *    他用de去替代了ab，但是没有元素再去替代c
 *
 */

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws Exception {
        //1.创建一个字节输入流管道，与源文件接通
        FileInputStream file=new FileInputStream("app\\src\\name.txt");

        //2.定义一个字节数组（桶），用于读取数据
        byte[] arr=new byte[3];
        //3.使用桶去读取文件字节数据
//        int read = file.read(arr);//返回的是读取的字节数量
//        System.out.println(read);//3
//        System.out.println(Arrays.toString(arr));//此时数组里面装到的是字节
//        //4.将字节解码
//        //读取多少，就倒出多少.从0读到返回的元素个数
//        String rs=new String(arr,0,read);
//        System.out.println(rs);
//
//
//        //读取第二桶
//        int read2 = file.read(arr);//返回的是读取的字节数量
//        System.out.println(read2);//3
//        System.out.println(Arrays.toString(arr));//此时数组里面装到的是字节
//        //读取多少，就倒出多少.从0读到返回的元素个数
//        String rs2=new String(arr,0,read2);
//        System.out.println(rs2);
//
//        //读取第三桶
//        int read3 = file.read(arr);//返回的是读取的字节数量
//        System.out.println(read3);//3
//        System.out.println(Arrays.toString(arr));//此时数组里面装到的是字节
//        //读取多少，就倒出多少.从0读到返回的元素个数
//        String rs3=new String(arr,0,read3);
//        System.out.println(rs3);
//        //cdi


        //改进，使用循环
//        while (file.read(arr)!=-1){
//            int read = file.read(arr);//这里就是下一次读取了，经典错误，我们此时要取的应该是判断语句里面的file.read(arr)
//            String s = new String(arr,0,read);
//            System.out.print(s);
//        }
        int read=0;
        while ((read=file.read(arr))!=-1){
            String s = new String(arr,0,read);
            System.out.print(s);
        }

    }
}
